<template>
	<view>	
		<view >
		  <view>
			<view class='header'>
			  <!-- <image src='../../static/wx.png'></image> -->
			  <open-data type="userAvatarUrl"></open-data>
			</view>
			<view class='content'>
			  <view>申请获取以下权限</view>
			  <text>获得你的公开信息(昵称，头像、地区等)</text>
			</view>
			<!-- withCredentials=true  获取到除用户基本信息之外的encryptedData以及iv等数据 -->
			<button class='bottom' type='primary' open-type="getUserInfo" withCredentials="true" lang="zh_CN" @getuserinfo="getHandle">
			  确认授权
			</button>
			<button class='bottom'   @click="cancelAuth">
			  暂不授权
			</button>
		  </view>
		</view>
		<u-toast ref="uToast" />
	</view>
</template>

<script>
	import { mapMutations} from 'vuex';
	export default {
		data() {
			return {
				isShow:false,
				code:"",
				SessionKey: '',
				encryptedData:"",
				iv:"",
				OpenId: '',
				nickName: '',			//用户名称
				avatarUrl: '',		//用户头像
			}
		},
		methods: {
			//...mapMutations(['updateUserInfo','setNikeName','setAvatarUrl']),
			cancelAuth(){
				console.log("用户取消了个人信息授权");
				uni.switchTab({
					url:'../index/index'
				});
			},
			checkUserAuth(){
				uni.showLoading({
				    title: '检查授权信息...'  
				});
				console.log("检查授权");
				var _this = this;
				// 获取授权信息
				uni.getSetting({
					success(res) {
						uni.hideLoading();
						// 判断scope后对应的scope.userInfo是否授权
						if (res.authSetting['scope.userInfo']) {
							// 如果已经授权,则获取用户信息
							uni.getUserInfo({
								provider: 'weixin',
								success(res){
									
									// 获取信息后执行登录
									_this.handleLogin(res);
								},
								fail(err){
									console.log("获取用户信息失败")
								}
							})
						} else if (!res.authSetting['scope.userInfo']) {
							uni.hideLoading();
							_this.isShow = true;
							// 如果没有授权则进行提前授权--进入页面时弹出
							// 不配置此项初次进入页面不会弹出申请权限窗口
							uni.authorize({
								// 配置授权选项--用户账号信息
								scope:'scope.userInfo',
								success(res){
									// 授权成功后可以直接获取用户相关信息
									console.log("授权成功")
								},
								fail(err){
									// 提前授权失败时,等待用户手动点击授权
									console.log("授权失败")
								}
							})
						};
					}
				})
			},
			// 点击按钮激发授权事件
            getHandle() {
                // 重赋值this
                var _this=this;
                // 获取用户授权设置
                uni.getSetting({
                    success(res){
                        if(res.authSetting['scope.userInfo']){
                            // 如果要获取的权限已经授权,则直接获取相关信息
                            uni.getUserInfo({
                                success(res){
                                    // 获取相关数据后，进行登录及数据请求
                                    _this.handleLogin(res);
                                },
                                fail(err){
                                    // 错误信息
                                    console.log(err)
                                }
                            })
                        }else if(!res.authSetting['scope.userInfo']){
							_this.isShow = true;
                            // 如果要获取的权限尚未授权,则此时触发授权，打开设置页面
                            uni.showModal({
                                //弹出提示框
                                title: '是否打开设置页？',
                                content: '需要在设置中获取用户信息',
                                success(res) {
                                    if (res.confirm) {
                                        uni.openSetting({
                                            // 弹出框，确认后打开设置页面
                                            success(res) {
                                                console.log(res.authSetting)
                                            },    
                                        })
                                    } else if (res.cancel) {
                                        console.log('用户点击取消');
                                    }
                                }
                            });    
                        }
                    }
                })    
            },
			// 执行登录,数据请求的方法
            handleLogin(infoRes){
				var _this=this;
				console.log(infoRes);
                this.avatarUrl=infoRes.userInfo.avatarUrl;//头像信息
                this.nickName=infoRes.userInfo.nickName;//昵称
                this.encryptedData=infoRes.encryptedData;//用户信息的加密数据串
                this.iv=infoRes.iv;//加密算法秘钥
				this.setNikeName(this.nickName);
				this.setAvatarUrl(this.avatarUrl);
				// 检测sessionkey是否过期 1未过期 0已过期
				uni.checkSession({					
					success(res) {		//状态未过期
						console.log("session_key未过期");
						console.log(res);
						let data = uni.getStorage("userInfo")
						//_this.updateUserInfo(data);
						uni.switchTab({
							url:'../index/index'
						});
					},
					fail() {		//状态已过期
						// 进行用户登录
						uni.removeStorage("userInfo");
						uni.login({
							provider: 'weixin',
						    success(res){
						        if(res.code){
									let obj = {
										code:res.code,
										encryptedData:_this.encryptedData,
										iv:_this.iv
									}
									//获取用户信息
									_this.getUserInfo(obj);
									/* uni.switchTab({
										url:'../index/index'
									}); */
						            
						        }else{
						            // 无code时不执行数据请求
						            console.log("无code")
						        }    
						    },
						    fail(err){
						        console.log("登陆失败")
						    }
						})
					}
				})
                
            },
			
			getUserInfo(obj){
				// 登录成功后且code存在，则进行数据请求
				this.$http.post("/check/userInfo",obj).then(res=>{
					
					let data = res.data.data;
					if(data){
						//存在用户信息
						uni.setStorage({
							key:'userInfo',
							data:data
						});
						//将用户信息通过vuex管理
						//this.updateUserInfo(data);
						uni.switchTab({
							url:'../index/index'
						});
					}else{
						//重新显示授权页面
						this.isShow = true;
						//用户信息不存在( 等后续上线测试无权限问题)
						/* this.$refs.uToast.show({
							title: '当前用户无权限登录',
							type: 'error'
						}) */ 
						uni.switchTab({
							url:'../index/index'
						});
					}
					console.log(res);
				}).catch(err => {
					this.$refs.uToast.show({
						title: '登录失败！',
						type: 'error'
					}) 
				})
			}
		},
		
		mounted() {
			this.checkUserAuth();
		},
		onShow() {
			console.log("onShow")
			this.checkUserAuth();
		},
	}
	
</script>

<style scoped>
	.header {
		    margin: 90rpx 0 90rpx 50rpx;
		    border-bottom: 1px solid #ccc;
		    text-align: center;
		    width: 650rpx;
		    height: 300rpx;
		    line-height: 450rpx;
		  }
		 
		  .header image {
		    width: 200rpx;
		    height: 200rpx;
		  }
		 
		  .content {
		    margin-left: 50rpx;
		    margin-bottom: 90rpx;
		  }
		 
		  .content text {
		    display: block;
		    color: #9d9d9d;
		    margin-top: 40rpx;
		  }
		 
		  .bottom {
		    border-radius: 80rpx;
		    margin: 70rpx 50rpx;
		    font-size: 35rpx;
		  }
</style>
